<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: async/async_fwd.hpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_ddc98e6e1a9e0f6adcacab8ac7c1f855.html">async</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle"><div class="title">async_fwd.hpp File Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:namespaceflow"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow.html">flow</a></td></tr>
<tr class="memdesc:namespaceflow"><td class="mdescLeft">&#160;</td><td class="mdescRight">Catch-all namespace for the Flow project: A collection of various production-quality modules written in modern C++17, originally by ygoldfel. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:namespaceflow_1_1async"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html">flow::async</a></td></tr>
<tr class="memdesc:namespaceflow_1_1async"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flow module containing tools enabling multi-threaded event loops operating under the asynchronous-task proactor pattern, by providing a streamlined API around boost.asio event loops with added advanced task- and thread-scheduling features. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:af35fb65bdea1a3a92929ec2c4a6a6b72"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">flow::async::Task</a> = Function&lt; void()&gt;</td></tr>
<tr class="memdesc:af35fb65bdea1a3a92929ec2c4a6a6b72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for a task that can be posted for execution by a <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> or <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">flow::util::Task_engine</a>; it is simply something callable via <code>()</code> with no arguments and returning nothing.  <a href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">More...</a><br /></td></tr>
<tr class="separator:af35fb65bdea1a3a92929ec2c4a6a6b72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a024042c64b7dc544a7a5587afa4b1949"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">flow::async::Op</a> = boost::any</td></tr>
<tr class="memdesc:a024042c64b7dc544a7a5587afa4b1949"><td class="mdescLeft">&#160;</td><td class="mdescRight">An object of this opaque type represents a collection of 1 or more <a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72" title="Short-hand for a task that can be posted for execution by a Concurrent_task_loop or flow::util::Task_...">async::Task</a>, past or future, such that: <em>if</em> one performs <code>C-&gt;post(J, F)</code> and <code>C-&gt;post(K, G)</code> (where C is <code>Concurrent_task_loop*</code>, JK are the same <code><a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a>&amp;</code>, or one refers to a transitive copy of the other, and FG are both <code>Task</code>s), <em>then</em> F and G will NOT execute concurrently.  <a href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">More...</a><br /></td></tr>
<tr class="separator:a024042c64b7dc544a7a5587afa4b1949"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8c06052dd887bc77444550a7c243154"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">flow::async::Scheduled_task</a> = util::Scheduled_task</td></tr>
<tr class="memdesc:af8c06052dd887bc77444550a7c243154"><td class="mdescLeft">&#160;</td><td class="mdescRight">Similar to <a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72" title="Short-hand for a task that can be posted for execution by a Concurrent_task_loop or flow::util::Task_...">flow::async::Task</a> but used for scheduled-in-future tasks as opposed to to-be-run-ASAP tasks.  <a href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">More...</a><br /></td></tr>
<tr class="separator:af8c06052dd887bc77444550a7c243154"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afdf5986cd6dc055673792890502135a8"><td class="memItemLeft" align="right" valign="top"><a id="afdf5986cd6dc055673792890502135a8" name="afdf5986cd6dc055673792890502135a8"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>flow::async::Task_asio_err</b> = Function&lt; void(const Error_code &amp;)&gt;</td></tr>
<tr class="memdesc:afdf5986cd6dc055673792890502135a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for a boost.asio completion handler: The minimal type, taking only a <a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09" title="Short-hand for a boost.system error code (which basically encapsulates an integer/enum error code and...">flow::Error_code</a> a/k/a <code>boost::system::error_code</code>. <br /></td></tr>
<tr class="separator:afdf5986cd6dc055673792890502135a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3808f400a39b77d712e0526fa412bf57"><td class="memItemLeft" align="right" valign="top"><a id="a3808f400a39b77d712e0526fa412bf57" name="a3808f400a39b77d712e0526fa412bf57"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>flow::async::Task_asio_err_sz</b> = Function&lt; void(const Error_code &amp;, size_t)&gt;</td></tr>
<tr class="memdesc:a3808f400a39b77d712e0526fa412bf57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for a boost.asio completion handler: The type that takes a <code>size_t</code> count of things successfully transferred usually. <br /></td></tr>
<tr class="separator:a3808f400a39b77d712e0526fa412bf57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a968806f54b14c697fd76b3339a2bdbbf"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">flow::async::Task_engine_ptr</a> = boost::shared_ptr&lt; util::Task_engine &gt;</td></tr>
<tr class="memdesc:a968806f54b14c697fd76b3339a2bdbbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for reference-counting pointer to a mutable <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> (a/k/a <code>boost::asio::io_context</code>).  <a href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">More...</a><br /></td></tr>
<tr class="separator:a968806f54b14c697fd76b3339a2bdbbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b92feccafa90bce16db57131c0fcd9e"><td class="memItemLeft" align="right" valign="top"><a id="a2b92feccafa90bce16db57131c0fcd9e" name="a2b92feccafa90bce16db57131c0fcd9e"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>flow::async::Strand_ptr</b> = boost::shared_ptr&lt; util::Strand &gt;</td></tr>
<tr class="memdesc:a2b92feccafa90bce16db57131c0fcd9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for ref-counted pointer to <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a>. <br /></td></tr>
<tr class="separator:a2b92feccafa90bce16db57131c0fcd9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a0a06794b16b72f2829ce3353557c8485"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">flow::async::Synchronicity</a> { <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">flow::async::S_ASYNC</a>
, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a57525f29ac96f4edd56c951e7d7c7b25">flow::async::S_ASYNC_AND_AWAIT_CONCURRENT_COMPLETION</a>
, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485ae9a9ae292ea3fbbe3b313348dcec0846">flow::async::S_ASYNC_AND_AWAIT_CONCURRENT_START</a>
, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485aff6bc53ee6c14f2eee463c06d9dff01f">flow::async::S_OPPORTUNISTIC_SYNC_ELSE_ASYNC</a>
 }</td></tr>
<tr class="memdesc:a0a06794b16b72f2829ce3353557c8485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enumeration indicating the manner in which <a class="el" href="namespaceflow_1_1async.html#a24567271e97a67d3cae6bd8bf8dc63c4" title="An extension of boost.asio&#39;s post() and dispatch() free function templates, this free function templa...">asio_exec_ctx_post()</a>, and various boost.asio "post" operations like it or based on it, are to actually execute the given task in relation to when the "posting" routine, itself, returns control to its caller.  <a href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">More...</a><br /></td></tr>
<tr class="separator:a0a06794b16b72f2829ce3353557c8485"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a24567271e97a67d3cae6bd8bf8dc63c4"><td class="memTemplParams" colspan="2">template&lt;typename Execution_context &gt; </td></tr>
<tr class="memitem:a24567271e97a67d3cae6bd8bf8dc63c4"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a24567271e97a67d3cae6bd8bf8dc63c4">flow::async::asio_exec_ctx_post</a> (log::Logger *logger_ptr, Execution_context *exec_ctx, Synchronicity synchronicity, Task &amp;&amp;task)</td></tr>
<tr class="memdesc:a24567271e97a67d3cae6bd8bf8dc63c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">An extension of boost.asio's <code>post()</code> and <code>dispatch()</code> free function templates, this free function template allows the user to more easily select the synchronicity behavior as the given task is posted onto the given execution context (<a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> or <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a> at least).  <a href="namespaceflow_1_1async.html#a24567271e97a67d3cae6bd8bf8dc63c4">More...</a><br /></td></tr>
<tr class="separator:a24567271e97a67d3cae6bd8bf8dc63c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adab04f47b40b92fffbe12bc33fadd223"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#adab04f47b40b92fffbe12bc33fadd223">flow::async::optimal_worker_thread_count_per_pool</a> (log::Logger *logger_ptr, bool est_hw_core_sharing_helps_algo)</td></tr>
<tr class="memdesc:adab04f47b40b92fffbe12bc33fadd223"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assuming a planned thread pool will be receiving ~symmetrical load, and its UX-affecting (in particular, per-op latency-affecting) operations are largely between processor and RAM: Returns the # of threads to store in that pool for efficient performance.  <a href="namespaceflow_1_1async.html#adab04f47b40b92fffbe12bc33fadd223">More...</a><br /></td></tr>
<tr class="separator:adab04f47b40b92fffbe12bc33fadd223"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e200db7e5375de21d2568004a85dcad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a3e200db7e5375de21d2568004a85dcad">flow::async::optimize_pinning_in_thread_pool</a> (log::Logger *logger_ptr, const std::vector&lt; util::Thread * &gt; &amp;threads_in_pool, bool est_hw_core_sharing_helps_algo, bool est_hw_core_pinning_helps_algo, bool hw_threads_is_grouping_collated, Error_code *err_code=nullptr)</td></tr>
<tr class="memdesc:a3e200db7e5375de21d2568004a85dcad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assuming the same situation as documented for <a class="el" href="namespaceflow_1_1async.html#adab04f47b40b92fffbe12bc33fadd223" title="Assuming a planned thread pool will be receiving ~symmetrical load, and its UX-affecting (in particul...">optimal_worker_thread_count_per_pool()</a>, and that indeed the pool now contains that number of running threads: Attempts to optimize thread-core-pinning behavior in that pool for efficient performance.  <a href="namespaceflow_1_1async.html#a3e200db7e5375de21d2568004a85dcad">More...</a><br /></td></tr>
<tr class="separator:a3e200db7e5375de21d2568004a85dcad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7fa5292ae2e7dddd11a7fe5228b1e574"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a7fa5292ae2e7dddd11a7fe5228b1e574">flow::async::reset_thread_pinning</a> (log::Logger *logger_ptr=nullptr, util::Thread *thread_else_ours=nullptr, Error_code *err_code=nullptr)</td></tr>
<tr class="memdesc:a7fa5292ae2e7dddd11a7fe5228b1e574"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the processor-affinity of the given thread &ndash; or calling thread &ndash; to be managed as the OS deems best.  <a href="namespaceflow_1_1async.html#a7fa5292ae2e7dddd11a7fe5228b1e574">More...</a><br /></td></tr>
<tr class="separator:a7fa5292ae2e7dddd11a7fe5228b1e574"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a227e64eb71ec278f19d679d8411db627"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a227e64eb71ec278f19d679d8411db627">flow::async::reset_this_thread_pinning</a> ()</td></tr>
<tr class="memdesc:a227e64eb71ec278f19d679d8411db627"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets processor-affinity of the calling thread; does not log; and throws on extremely unlikely system error.  <a href="namespaceflow_1_1async.html#a227e64eb71ec278f19d679d8411db627">More...</a><br /></td></tr>
<tr class="separator:a227e64eb71ec278f19d679d8411db627"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af90c1e763d49c3f3033a74871e897394"><td class="memTemplParams" colspan="2">template&lt;typename Handler &gt; </td></tr>
<tr class="memitem:af90c1e763d49c3f3033a74871e897394"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#af90c1e763d49c3f3033a74871e897394">flow::async::asio_handler_via_op</a> (Concurrent_task_loop *loop, const Op &amp;op, Handler &amp;&amp;handler)</td></tr>
<tr class="memdesc:af90c1e763d49c3f3033a74871e897394"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given a boost.asio <em>completion handler</em> <code>handler</code> for a boost.asio <code>async_*()</code> action on some boost.asio I/O object to be initiated in the immediate near future, returns a wrapped handler with the same signature to be passed as the handler arg to that <code>async_*()</code> action, so that <code>handler()</code> will execute non-concurrently with other tasks in <code>Op op</code>.  <a href="namespaceflow_1_1async.html#af90c1e763d49c3f3033a74871e897394">More...</a><br /></td></tr>
<tr class="separator:af90c1e763d49c3f3033a74871e897394"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f2f976a53191a3b0cd28898bb23c551"><td class="memTemplParams" colspan="2">template&lt;typename Exec_ctx_ptr &gt; </td></tr>
<tr class="memitem:a7f2f976a53191a3b0cd28898bb23c551"><td class="memTemplItemLeft" align="right" valign="top">Exec_ctx_ptr&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a7f2f976a53191a3b0cd28898bb23c551">flow::async::op_to_exec_ctx</a> (Concurrent_task_loop *loop, const Op &amp;op)</td></tr>
<tr class="memdesc:a7f2f976a53191a3b0cd28898bb23c551"><td class="mdescLeft">&#160;</td><td class="mdescRight">Template specialization model for operation that obtains the underlying execution context, such as a <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> or <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a>, stored in an <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> generated by the given <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a>.  <a href="namespaceflow_1_1async.html#a7f2f976a53191a3b0cd28898bb23c551">More...</a><br /></td></tr>
<tr class="separator:a7f2f976a53191a3b0cd28898bb23c551"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad70c594985b402d9024b80370611fc1c"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:ad70c594985b402d9024b80370611fc1c"><td class="memTemplItemLeft" align="right" valign="top">Task_engine_ptr&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#ad70c594985b402d9024b80370611fc1c">flow::async::op_to_exec_ctx&lt; Task_engine_ptr &gt;</a> (Concurrent_task_loop *loop, const Op &amp;op)</td></tr>
<tr class="memdesc:ad70c594985b402d9024b80370611fc1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Template specialization for operation that obtains the underlying execution context, in this case a <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a>, stored in an <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> generated by the given <a class="el" href="classflow_1_1async_1_1Segregated__thread__task__loop.html" title="Concrete Concurrent_task_loop that uses the legacy pin-Tasks-within-1-Op-to-1-thread method of achiev...">Segregated_thread_task_loop</a>.  <a href="namespaceflow_1_1async.html#ad70c594985b402d9024b80370611fc1c">More...</a><br /></td></tr>
<tr class="separator:ad70c594985b402d9024b80370611fc1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5dad6aeb3cf4219833e18343bec0b423"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a5dad6aeb3cf4219833e18343bec0b423"><td class="memTemplItemLeft" align="right" valign="top">Strand_ptr&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceflow_1_1async.html#a5dad6aeb3cf4219833e18343bec0b423">flow::async::op_to_exec_ctx&lt; Strand_ptr &gt;</a> (Concurrent_task_loop *loop, const Op &amp;op)</td></tr>
<tr class="memdesc:a5dad6aeb3cf4219833e18343bec0b423"><td class="mdescLeft">&#160;</td><td class="mdescRight">Template specialization for operation that obtains the underlying execution context, in this case a <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a>, stored in an <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> generated by the given <a class="el" href="classflow_1_1async_1_1Cross__thread__task__loop.html" title="Concrete Concurrent_task_loop that is able to efficiently schedule Tasks within a given Op to execute...">Cross_thread_task_loop</a>.  <a href="namespaceflow_1_1async.html#a5dad6aeb3cf4219833e18343bec0b423">More...</a><br /></td></tr>
<tr class="separator:a5dad6aeb3cf4219833e18343bec0b423"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
